package main

import (
	"fmt"
	"time"
)

func main()  {
	ch:=make(chan int,1000) //创建有缓存通道
	go func(){
		for i:=0;i<10;i++{
			fmt.Println(i)
			ch<-i
			fmt.Println("--------")
		}
	}()
	go func() {
		for{
			a,ok:=<-ch
			if !ok{
				fmt.Println("close")
				return
			}
			fmt.Println("a",a)
		}
	}()
	time.Sleep(time.Second*100)
	close(ch)
	fmt.Println("ok")

}

//运行不了，报错：panic: send on closed channel，因为读和写两个goroutine在主线程中，所以当主线程执行到time.sleep就会睡１００秒，等待两个
//goroutine执行，但是如果是单单读取通道中的数据，是不会报错的。不向通道中写入数据的话，读取的数据就是零值，如果向通道中写入数据之前关闭通道，就会报错
//所以应该在通道被关闭之前写入数据。所以把time.Sleep放在close(ch)之前即可，等写入完数据，读取完数据的时候再关闭通道